﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//操作符

//原码，反码，补码。只适用于整数，不适用小数
//整数分为：有符号和无符号。有符号分为：正，负整数。对于正整数和无符号整数，原，反，补是一样的。
//对于负数，补码=原码取反+1；
//有符号整数的最高位是符号位 1表示负数，0表示正数


//不能创建临时变量（第三个变量），实现两个整数的交换

struct stu
{
	char name[30];
	int age;
	float m;
};

int main()
{
	//////不能创建临时变量（第三个变量），实现两个整数的交换
	//int a = 10;
	//int b = 20;
	//printf("交换前:a=%d , b=%d\n", a, b);
	//a = a ^ b;
	//b = a ^ b;
	//a = a ^ b;
	//printf("交换后:a=%d , b=%d\n", a, b);

	//编写代码实现：求⼀个整数存储在内存中的⼆进制中1的个数
	//解法一：
	//int n = 13;
	//int cout = 0;
	//for (int i = 0; i < 32; i++)
	//	if ((n >> i) & 1 == 1) cout++;
	//printf("%d\n", cout);

	//解法二：
	//int n = 13;
	//int cout = 0;
	//while (n)
	//{
	//	n=n& (n - 1);
	//	cout++;
	//}
	//printf("%d\n", cout);

	//结构体
	struct stu s1 = { "lisi",20,98.5f };
	scanf("%s%d%f", s1.name, &(s1.age), &(s1.m));
	printf("%s %d %.2f\n", s1.name, s1.age, s1.m);
	//整型提升发生在字符型和短整型之间的。提升到普通整型。
	//对于有符号而言，提升的部分全用符号位填充
	//对于无符号而言，提升的部分全用0补充
	return 0;
}